from django.db import models
from django.contrib.auth.models import User
# Create your models here.
# class UserInfo(AbstractUser):
#     """
#     UserInfo: 用户信息表
#     nid: id列
#     phone: 电话

#     内置auth引用创建的User模型中有以下字段:
#     username: 用户名。150个字符以内。可以包含数字和英文字符，以及_、@、+、.和-字符。不能为空，且必须唯一！
#     first_name:歪果仁的first_name，在30个字符以内。可以为空。
#     last_name:歪果仁的last_name，在150个字符以内。可以为空。
#     email:邮箱。可以为空。
#     password:密码。经过哈希过后的密码。
#     groups:分组。一个用户可以属于多个分组，一个分组可以拥有多个用户。groups这个字段是跟Group的一个多对多的关系。
#     user_permissions:权限。一个用户可以拥有多个权限，一个权限可以被多个用户所有用。和Permission属于一种多对多的关系。
#     is_staff:是否可以进入到admin的站点。代表是否是员工。这个字段如果不使用admin的话，可以自行忽略，不影响使用
#     is_active:是否是可用的。对于一些想要删除账号的数据，我们设置这个值为False就可以了，而不是真正的从数据库中删除。
#     is_superuser:是否是超级管理员。如果是超级管理员，那么拥有整个网站的所有权限。
#     last_login:上次登录的时间。
#     date_joined:账号创建的时间。

#     tips:
#     UserInfo表里不需要有auth_user里重复的字段，如username和password，但是可以直接使用这些字段，并且Django会自动将password加密。
#     按上述方法扩展内置的auth_user表后，一定要在settings.py中配置，让Django使用我们新定义的UserInfo表用户认证。
#     """
#     nid = models.AutoField(primary_key=True)
#     phone = models.CharField(max_length=11, null=True, unique=False)
    
#     def __str__(self):
#         return self.username

# User继承方法扩展有问题，以外键方式扩展用户属性
class UserProfile(models.Model):
    """
    UserProfile: 对原始User的扩展
    use: 记录手机号等原始model里没有的字段信息
    """
    # models.CASCADE级联删除
    user = models.OneToOneField(User,on_delete=models.CASCADE,related_name='profile',verbose_name='用户名')

    # 自定义字段
    # 学号
    student_id = models.CharField(max_length=12,null=True, unique=False,verbose_name='学号')
    # 手机电话
    phone = models.CharField(max_length=11, null=True, unique=False,verbose_name='电话号码')
    # 姓名
    true_name = models.CharField(max_length=10,null = True,unique=False,verbose_name='姓名')
    # 最后修改时间
    mod_data = models.DateTimeField(auto_now=True,verbose_name='上次修改')

    class Meta:
        verbose_name = "用户资料"

    def __str__(self):
        # 调用主表的str方法
        return "{}".format(self.user.__str__())